package com.tzy.note.base.thread;

import org.junit.jupiter.api.Test;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * @author tangzanyong
 * @description 多线程实现方式六：使用Timer定时器
 * @date 2020/4/16
 **/
public class Thread6 extends TimerTask{
    //1.间隔时间重复执行
    public static void main(String[] args) {
        // 创建定时器   ScheduledExecutorService
        Timer timer = new Timer();
        // 提交计划任务
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println("定时任务执行了...");
            }
        }, new Date(), 1000);
    }
    /*
    private static final SimpleDateFormat format =
            new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    //2.指定时间点执行
    public static void main(String[] args) throws ParseException {
        // 创建定时器   ScheduledExecutorService
        Timer timer = new Timer();
        // 提交计划任务
        timer.schedule(new TimerTask(){
            @Override
            public void run() {
                System.out.println("定时任务执行了...");
            }
        }, format.parse("2020-04-17 10:28:00"));
    }
    */

    @Override
    public void run() {
        System.out.println("----task2 start--------"+new Date().toLocaleString());
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("----5s later, task2 end--------"+new Date().toLocaleString());
    }
    @Test
    public void test(){
        ScheduledExecutorService pool = Executors.newScheduledThreadPool(2);//启用2个线程
        Thread6 t1 = new Thread6();
        // 马上运行，任务消耗3秒。运行结束后等待2秒。【有空余线程时】，再次运行该任务
        pool.scheduleWithFixedDelay(t1, 0, 2, TimeUnit.SECONDS);

        // 马上运行，任务消耗5秒，运行结束后等待2秒。【有空余线程时】，再次运行该任务
        Thread6 t2 = new Thread6();
        pool.scheduleWithFixedDelay(t2, 0, 2, TimeUnit.SECONDS);
    }
}
